package main

import (
	"fmt"
)

func main() {

	sliceDemo()

	s := []int{1, 2, 3}
	//截取，
	var s1 = s[0:2]
	fmt.Println(s1) //[1 2]

	//截取全部
	fmt.Println(s[:])

	fmt.Println(s[1:]) //[2 3]

	//拷贝
	s2 := make([]int, 3)
	copy(s2, s)
	fmt.Println(s2)

}

func sliceDemo() {
	//声明slice是一个切片，但是没有给slice分配空间
	var slice []int
	//判断slice是否为空
	if slice == nil {
		fmt.Println("是一个空切片")
	}

	//声明切片，同时给slice分配三个空间，初始化是0
	var slice3 []int = make([]int, 3)
	fmt.Println(slice3, "cap ", cap(slice3), " len ", len(slice3))
	slice3 = append(slice3, 1)
	fmt.Println(slice3, "cap ", cap(slice3), " len ", len(slice3))

	slice3 = append(slice3, 1)
	slice3 = append(slice3, 1)
	fmt.Println(slice3, "cap ", cap(slice3), " len ", len(slice3))

	//cap会动态增加容量的2倍
	slice3 = append(slice3, 1)
	fmt.Println(slice3, "cap ", cap(slice3), " len ", len(slice3))
}
